﻿#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
using namespace std;

//字符串压缩
//https://leetcode.cn/problems/compress-string-lcci/submissions/
//class Solution {
//public:
//    string compressString(string S) {
//        int n = S.size();
//        string ret;
//        ret.reserve(n / 2);
//        int num = 1;
//        int pos = 1;
//        while (pos < n)
//        {
//            if (S[pos] == S[pos - 1]) ++num;
//            else
//            {
//                ret.push_back(S[pos - 1]);
//                ret += to_string(num);
//                num = 1;
//            }
//            ++pos;
//        }
//        ret.push_back(S[pos - 1]);
//        ret += to_string(num);
//        if (ret.size() >= n) return S;
//        return ret;
//    }
//};


//字符串相乘
//https://leetcode.cn/problems/multiply-strings/submissions/
//class Solution {
//public:
//    //字符串相加
//    string addStrings(string num1, string num2)
//    {
//        int end1 = num1.size() - 1;
//        int end2 = num2.size() - 1;
//        string retStr;
//        retStr.reserve(end1 > end2 ? end1 + 1 : end2 + 1);
//        int next = 0;
//        int ret = 0;
//        while (end1 >= 0 || end2 >= 0)
//        {
//            ret = (end1 >= 0 ? num1[end1--] - '0' : 0) + (end2 >= 0 ? num2[end2--] - '0' : 0) + next;
//            next = ret / 10;
//            ret = ret % 10;
//            retStr += (ret + '0');
//        }
//        if (next)
//            retStr += (1 + '0');
//
//        reverse(retStr.begin(), retStr.end());
//        return retStr;
//    }
//
//    //字符串相乘
//    string multiply(string num1, string num2)
//    {
//        if (num1 == "0" || num2 == "0") return "0";
//        int pos1 = num1.size() - 1;
//        int bit = 0; //补0数
//        vector<string> vs;
//        int vspos = 0;
//        while (pos1 >= 0)
//        {
//            int n1 = num1[pos1] - '0';
//            int pos2 = num2.size() - 1;
//            int next = 0;
//            vs.push_back(string());
//            while (pos2 >= 0)
//            {
//                int num = n1 * (num2[pos2] - '0') + next;
//                next = num / 10;
//                num %= 10;
//                vs[vspos].push_back(num + '0');
//                --pos2;
//            }
//            if (next) vs[vspos].push_back(next + '0');
//            reverse(vs[vspos].begin(), vs[vspos].end());
//            for (int i = 0; i < bit; ++i) vs[vspos].push_back('0'); //不同位相乘补0
//            ++bit;
//            ++vspos;
//            --pos1;
//        }
//        int n = vs.size();
//        if (n < 2) return vs[0];
//        string ret = addStrings(vs[0], vs[1]);
//        for (int i = 2; i < n; ++i)
//            ret = addStrings(ret, vs[i]);
//
//        return ret;
//    }
//};